﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization;
using System.Threading;
using HotelSoft.HotelManagement_BUS;
using HotelSoft.HotelManagement_DTO;
using System.Collections;
using DevComponents.DotNetBar;

namespace HotelSoft.HotelManagement_GUI
{
    public partial class frmQuanly_NHANVIEN : Form
    {
        // Define the CS_DROPSHADOW constant
        private const int CS_DROPSHADOW = 0x00020000;

        // Override the CreateParams property
        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ClassStyle |= CS_DROPSHADOW;
                return cp;
            }
        }

        Double temp = 1;
        NhanVienBUS busNhanVien;
        NhanVienDTO dtoNhanVien;
        ArrayList dsNhanVien;
        BindingSource bsData = null;
        public int iCo = 0;

        public int btClick = 0;

        public bool bNhapDung = false;
        public bool kt = false;
        public frmQuanly_NHANVIEN()
        {
            InitializeComponent();
            ThamSo thamso = new ThamSo();
            Cbm_ChucVu.Items.Add(thamso.dsCacLoaiNhanVien[0].ToString());//Tháng
            Cbm_ChucVu.Items.Add(thamso.dsCacLoaiNhanVien[1].ToString());//Quy
            Cbm_ChucVu.Items.Add(thamso.dsCacLoaiNhanVien[2].ToString());//Năm
            Cbm_ChucVu.Items.Add(thamso.dsCacLoaiNhanVien[3].ToString());//Năm
            Cbm_ChucVu.Items.Add(thamso.dsCacLoaiNhanVien[4].ToString());//Năm
            Cbm_ChucVu.Items.Add(thamso.dsCacLoaiNhanVien[5].ToString());//Năm
            Cbm_ChucVu.SelectedIndex = -1;
        }
        private static string masoNV = "";
        public string MANHANVIEN
        {
            get { return masoNV; }
            set { masoNV = value; }
        }

        private void frmQuanly_NHANVIEN_Load(object sender, EventArgs e)
        {
            CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
            culture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
            Thread.CurrentThread.CurrentCulture = culture;
            timer1.Enabled = true;
            LayDanhSachNhanVien();
            Ra_Nam.Checked = true;

            if (Grid_NhanVien.SelectedRows.Count == 0)
            {
                DieukienMo(true);
                txtMaNV.Focus();
                kt = true;

            }
            DieukienMo(false);
            if (masoNV != "")
            {
                btnOpentextbox_Click(sender, e);
                txtMaNV.Text = masoNV;
                Btn_TraCuu_Click(sender, e);
            }
        }

        public void LamMoi()
        {
            txtMaNV.Text = "";
            Txt_HoTen.Text = "";
            dt_NgaySinh.IsEmpty = true;
            Cbm_ChucVu.SelectedIndex = -1;
            Cbm_ChucVu.DropDownStyle = ComboBoxStyle.DropDown;
            Txt_DiaChi.Text = "";
            Txt_DienThoai.Text = "";
            dt_NgayVL.IsEmpty = true;
            Txt_MucLuong.Text = "0";
            Ra_Nam.Checked = true;
        }
        public void DieukienMo(bool Mo)
        {
            txtMaNV.Enabled = Mo;
            Txt_HoTen.Enabled = Mo;
            dt_NgaySinh.Enabled = Mo;
            Cbm_ChucVu.Enabled = Mo;
            Txt_DiaChi.Enabled = Mo;
            Txt_DienThoai.Enabled = Mo;
            dt_NgayVL.Enabled = Mo;
            Txt_MucLuong.Enabled = Mo;
            groupBox1.Enabled = Mo;

            Gru_LKL.Enabled = Mo;
            Gru_TXS.Enabled = !Mo;
        }
       
        private void LayDanhSachNhanVien()
        {
            busNhanVien = new NhanVienBUS();
            dsNhanVien = busNhanVien.LayDanhSachNhanVien();
            XuatDanhSachNhanVien(dsNhanVien);
            Grid_NhanVien.CellContentClick += new DataGridViewCellEventHandler(Grid_NhanVien_CellContentClick);

        }
        private void XuatDanhSachNhanVien(ArrayList dsNhanVien)
        {
            Grid_NhanVien.AutoGenerateColumns = false;

            this.bsData = new BindingSource(dsNhanVien, "");
            Grid_NhanVien.DataSource = bsData;
        }

        private void Grid_NhanVien_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (Grid_NhanVien.SelectedCells.Count > 0)
            {
                int row = Grid_NhanVien.SelectedCells[0].RowIndex;
                txtMaNV.Text = Grid_NhanVien.Rows[row].Cells[1].Value.ToString();
                Txt_HoTen.Text = Grid_NhanVien.Rows[row].Cells[2].Value.ToString();
                if (Grid_NhanVien.Rows[row].Cells[3].Value.ToString() == "Nam")
                    Ra_Nam.Checked = true;
                else if (Grid_NhanVien.Rows[row].Cells[3].Value.ToString() == "Nữ")
                    Ra_Nu.Checked = true;
                dt_NgaySinh.Text = Grid_NhanVien.Rows[row].Cells[4].Value.ToString();
                Txt_DiaChi.Text = Grid_NhanVien.Rows[row].Cells[5].Value.ToString();
                Txt_DienThoai.Text = Grid_NhanVien.Rows[row].Cells[6].Value.ToString();
                dt_NgayVL.Text = Grid_NhanVien.Rows[row].Cells[7].Value.ToString();
                Cbm_ChucVu.Text = Grid_NhanVien.Rows[row].Cells[8].Value.ToString();
                Txt_MucLuong.Text = Grid_NhanVien.Rows[row].Cells[9].Value.ToString();
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            Double temp = 1;
            this.Opacity = this.Opacity + 0.1;
            if (this.Opacity == temp)
            {
                timer1.Enabled = false;
            }
        }
        private int LayNhanVienDuocChon(out ArrayList dsNhanVien)
        {
            int iIndex = 0;
            dsNhanVien = new ArrayList();
            foreach (DataGridViewRow dong in this.Grid_NhanVien.Rows)
            {
                DataGridViewCheckBoxCell cell = (DataGridViewCheckBoxCell)dong.Cells[0];
                bool bChecked = (null != cell && null != cell.Value && true == (bool)cell.Value);
                if (bChecked)
                {
                    dsNhanVien.Add(dong.DataBoundItem);
                    iIndex = dong.Index;
                }
            }

            return iIndex;
        }
        private void XoaNhanVienDuocChonKhoiDanhSach()
        {
            for (int i = 0; i < Grid_NhanVien.Rows.Count; i++)
            {
                DataGridViewRow dong = Grid_NhanVien.Rows[i];
                DataGridViewCheckBoxCell cell = (DataGridViewCheckBoxCell)dong.Cells[0];
                NhanVienDTO dtoPhongBiXoa = (NhanVienDTO)Grid_NhanVien.Rows[cell.RowIndex].DataBoundItem;

                bool bChecked = (null != cell && null != cell.Value && true == (bool)cell.Value);
                if (bChecked)
                {
                    this.bsData.RemoveAt(cell.RowIndex);
                    i--;
                }
            }
        }
        private void XoaNhanVien()
        {
            ArrayList dsNhanVien;
            LayNhanVienDuocChon(out dsNhanVien);
            if (dsNhanVien.Count > 0)
            {
                NhanVienBUS busNhanVien = new NhanVienBUS();
                busNhanVien.Xoa(dsNhanVien);
                XoaNhanVienDuocChonKhoiDanhSach();
            }
            else
            {
                MessageBox.Show("Xin hãy chọn Nhân Viên muốn xóa!");
                return;
            }
        }

        private bool KiemTraPhongCoChua()
        {
            NhanVienDTO dto = new NhanVienDTO();
            dto.MASONV = txtMaNV.Text;
            return busNhanVien.KTMA(dto);
        }

        private bool KiemTraDuLieuNhap()
        {
            if (txtMaNV.Text.Length==0 || txtMaNV.Text.Trim() == "" ||
                Txt_MucLuong.Text.Length==0 || Txt_MucLuong.Text.Trim()==""||
                Txt_HoTen.Text.Length==0 || Txt_HoTen.Text.Trim() == ""||
                Cbm_ChucVu.Text=="")
            {
                MessageBox.Show("Xin bạn hãy điền đầy đủ thông tin!");
                return false;
            }
            return true;
        }

        private void Btn_Thoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void Btn_Them_Click(object sender, EventArgs e)
        {
            DieukienMo(true);
            txtMaNV.Focus();
            LamMoi();
            Cbm_ChucVu.DropDownStyle = ComboBoxStyle.DropDownList;
            kt = true;
        }
       
        private void Btn_Xoa_Click(object sender, EventArgs e)
        {
            ArrayList dsNhanVien;
            LayNhanVienDuocChon(out dsNhanVien);
            if (dsNhanVien.Count > 0)
            {
                DialogResult kq = MessageBox.Show("Bạn có thật sự muốn xóa không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (kq == DialogResult.Yes)
                {
                    XoaNhanVien();
                    iCo = 1;
                    LamMoi();
                }
            }
            else
            {
                MessageBox.Show("Xin hãy chọn Nhân viên mà bạn muốn xóa!");
            }
        }

        private void Btn_Sua_Click(object sender, EventArgs e)
        {
            if (txtMaNV.Text!="" && Txt_HoTen.Text!="")
            {
                Cbm_ChucVu.DropDownStyle = ComboBoxStyle.DropDownList;
                DieukienMo(true);
                txtMaNV.Enabled = false;
                kt = false;
            }
            else
            {
                MessageBox.Show("Xin hãy chọn một nhân viên muốn sửa thông tin!");
            }
        }

        private void Btn_TraCuu_Click(object sender, EventArgs e)
        {
            if (txtMaNV.Enabled == false && Txt_HoTen.Enabled == false)
            {
                MessageBox.Show("Xin hãy nhấn nút mở ô nhập liệu\nđể tiến hành nhập liệu và tra cứu", "Thông báo tra cứu");
                btnOpentextbox.Focus();
                return;
            }

            NhanVienDTO dtoNhanVienCanTraCuu = new NhanVienDTO();

            if (txtMaNV.Text == "")
                dtoNhanVienCanTraCuu.MASONV = null;
            else
                dtoNhanVienCanTraCuu.MASONV = txtMaNV.Text;
            if (Txt_HoTen.Text == "")
                dtoNhanVienCanTraCuu.HOTENNV = null;
            else
                dtoNhanVienCanTraCuu.HOTENNV = Txt_HoTen.Text;
            if (dt_NgaySinh.Value == null)
                dtoNhanVienCanTraCuu.NGAYSINH = null;
            else
                dtoNhanVienCanTraCuu.NGAYSINH = dt_NgaySinh.Text;

                dtoNhanVienCanTraCuu.NGAYVL = null;
                dtoNhanVienCanTraCuu.DIACHINV = null;
                dtoNhanVienCanTraCuu.SDTNV = null;
                dtoNhanVienCanTraCuu.MUCLUONG = 0;
            if (Cbm_ChucVu.Text == "")
                dtoNhanVienCanTraCuu.CHUCVU = null;
            else
                dtoNhanVienCanTraCuu.CHUCVU = Cbm_ChucVu.Text;

            dtoNhanVienCanTraCuu.GIOITINH = null;

            ArrayList dsTraCuuDuoc = busNhanVien.TraCuuNhanVien(dsNhanVien, dtoNhanVienCanTraCuu);
            XuatDanhSachNhanVien(dsTraCuuDuoc);
            DieukienMo(false);
            LamMoi();
            if (Grid_NhanVien.RowCount == 0)
            {
                MessageBox.Show("Không tìm thấy thông tin do bạn nhập\nXin vui lòng nhập lại thông tin khác", "Thông báo tra cứu");
            }
        }

        private void Btn_Lamlai_Click(object sender, EventArgs e)
        {
            DieukienMo(true);
            dt_NgaySinh.IsEmpty = true;
            dt_NgayVL.IsEmpty = true;
            txtMaNV.Enabled = true;
            LayDanhSachNhanVien();
        }

        private void timer1_Tick_1(object sender, EventArgs e)
        {
            this.Opacity = this.Opacity + 0.1;
            if (this.Opacity == temp)
                timer1.Enabled = false;
        }

        private void Btn_Luu_Click(object sender, EventArgs e)
        {
            try
            {
                if (kt == true)
                {
                    dtoNhanVien = new NhanVienDTO();
                    bNhapDung = KiemTraDuLieuNhap();
                    if (bNhapDung)
                    {
                        if (KiemTraPhongCoChua())
                        {
                            MessageBox.Show("Mã số NV này đã tồn tại, xin nhập mã số khác!");
                            txtMaNV.Focus();
                            txtMaNV.SelectAll();
                            return;
                        }

                        dtoNhanVien.MASONV = txtMaNV.Text;
                        dtoNhanVien.HOTENNV = Txt_HoTen.Text;
                        dtoNhanVien.NGAYSINH = dt_NgaySinh.Value.ToShortDateString();
                        if (Ra_Nam.Checked == true)
                            dtoNhanVien.GIOITINH = "Nam";
                        else
                            dtoNhanVien.GIOITINH = "Nữ";
                        dtoNhanVien.DIACHINV = Txt_DiaChi.Text;
                        dtoNhanVien.SDTNV = Txt_DienThoai.Text;
                        dtoNhanVien.MUCLUONG = float.Parse(Txt_MucLuong.Text);
                        dtoNhanVien.CHUCVU = Cbm_ChucVu.Text;
                        dtoNhanVien.NGAYVL = dt_NgayVL.Value.ToShortDateString();
                        dtoNhanVien.TENKS = "Khách Sạn Rex";
                    
                   
                        if(!busNhanVien.Them(dtoNhanVien))
                        {
                            MessageBox.Show("Thất bại! Xin hãy kiểm tra lại");
                            return;
                        }

                        if (bsData.Count == 0)
                        {
                            ArrayList dsNhanVien = new ArrayList();
                            dsNhanVien.Add(dtoNhanVien);
                            bsData = new BindingSource(dsNhanVien, "");
                            this.Grid_NhanVien.DataSource = bsData;
                        }
                        else
                        {
                            bsData.Add(dtoNhanVien);
                        }
                    }
                }
                else
                {
                    dtoNhanVien = new NhanVienDTO();
                    dtoNhanVien.MASONV = txtMaNV.Text;
                    dtoNhanVien.HOTENNV = Txt_HoTen.Text;
                    dtoNhanVien.NGAYSINH = dt_NgaySinh.Value.ToShortDateString();
                    if (Ra_Nam.Checked == true)
                        dtoNhanVien.GIOITINH = "Nam";
                    else
                        dtoNhanVien.GIOITINH = "Nữ";
                    dtoNhanVien.DIACHINV = Txt_DiaChi.Text;
                    dtoNhanVien.SDTNV = Txt_DienThoai.Text;
                    dtoNhanVien.MUCLUONG = float.Parse(Txt_MucLuong.Text);
                    dtoNhanVien.CHUCVU = Cbm_ChucVu.Text;
                    dtoNhanVien.NGAYVL = dt_NgayVL.Value.ToShortDateString();
                    dtoNhanVien.TENKS = "Khách Sạn Rex";

                    if (!busNhanVien.CapNhatThongTin(dtoNhanVien))
                    {
                        MessageBox.Show("Thất bại! Xin hãy kiểm tra lại");
                        return;
                    }
                    ArrayList dsNhanVien = new ArrayList();
                    dsNhanVien.Add(dtoNhanVien);
                    bsData = new BindingSource(dsNhanVien, "");
                    this.Grid_NhanVien.DataSource = bsData;
                }
            }
            catch
            {
                MessageBox.Show("Lỗi phải nhập đầy đủ thông tin.");
            }
            DieukienMo(false);
            LamMoi();
            Btn_Them.Focus();
        }

        private void Btn_KhongLuu_Click(object sender, EventArgs e)
        {
            LamMoi();
            DieukienMo(false);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            LayDanhSachNhanVien();
            LamMoi();
            DieukienMo(false);
        }

        private void btnOpentextbox_Click(object sender, EventArgs e)
        {
            LamMoi();
            DieukienMo(false);
            Gru_TXS.Enabled = false;
            txtMaNV.Enabled = true;
            txtMaNV.Focus();
            Txt_HoTen.Enabled = true;
            Cbm_ChucVu.Enabled = true;
            dt_NgaySinh.Enabled = true;
        }

        private void Txt_MucLuong_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
                e.Handled = true;
        }

        private void Txt_HoTen_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsLetter(e.KeyChar) && e.KeyChar!=' ')
                e.Handled = true;
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
